home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 32 / Mac Magazin and MacEasy Magazine CD - Issue 32.iso / Grafik & Text / OzTeX3.0 / MetaPost / Inputs / sarith.mp < prev    next >
Text File  |  1996-08-24  |  1KB  |  48 lines

  1. % Macros for arithmetic on strings that represent big numbers
  2. % All the macros below except ordinary numeric values as well
  3.  
  4. % Scvnum <number>        % convert to an ordinary numeric
  5. % Sabs <number>          % absolute value
  6. % <number> Sadd <number> % add
  7. % <number> Ssub <number> % subtract
  8. % <number> Smul <number> % multiply
  9. % <number> Sdiv <number> % divide
  10. % <number> Sleq <number> % compare <=
  11. % <number> Sneq <number> % numeric compare <>
  12.  
  13. % All other externally visible names start with `S' and end with `_'
  14.  
  15.  
  16. if unknown Mzero:
  17.   begingroup interim    % marith.mp starts with `warningcheck:=0'
  18.   input marith
  19.   endgroup;             % restore warningcheck; we zero it when necessary
  20. fi
  21.  
  22.  
  23. vardef Sunop_(expr x)(text o) =
  24.   interim warningcheck:=0;
  25.   o  if numeric x: decimal fi  x
  26. enddef;
  27.  
  28.  
  29. vardef Sbinop_@#(expr a, b)(text o) =
  30.   interim warningcheck:=0;
  31.   @# (Mlog_Str a  o  Mlog_Str b)
  32. enddef;
  33.  
  34.  
  35. def Ssbinop_ = Sbinop_.Mexp_str enddef;
  36.  
  37.  
  38. vardef Sabs primary x = Sunop_(x, Mexp_str Mabs Mlog_str) enddef;
  39. vardef Scvnum primary x = Sunop_(x, Mexp Mlog_str) enddef;
  40. % The inverse of Scvnum is the `decimal' primitive.
  41.  
  42. primarydef a Smul b = Ssbinop_(a,b,Mmul) enddef;
  43. primarydef a Sdiv b = Ssbinop_(a,b,Mdiv) enddef;
  44. secondarydef a Sadd b = Ssbinop_(a,b,Madd) enddef;
  45. secondarydef a Ssub b = Ssbinop_(a,b,Msub) enddef;
  46. tertiarydef a Sleq b = Sbinop_(a,b,Mleq) enddef;
  47. tertiarydef a Sneq b = Sbinop_(a,b,<>) enddef;
  48.